package cn.catsdad.controller;

import cn.catsdad.base.controller.BaseCrudController;
import cn.catsdad.base.web.HttpResponse;
import cn.catsdad.dto.UserDTO;
import cn.catsdad.page.UserParam;
import cn.catsdad.service.api.UserService;
import cn.catsdad.vo.TreeNodeVO;
import cn.catsdad.vo.UserDropdownQueryVo;
import org.springframework.web.bind.annotation.*;

import java.util.Collection;
import java.util.List;

/**
 * 用户管理controller
 *
 * @author xuyonglong
 * @version V1.0 2023/4/23
 */
@RestController
@RequestMapping("/api/auth/users")
public class UserController extends BaseCrudController<UserDTO, Long, UserService, UserParam> {

    /**
     * 批量重置密码
     *
     * @param ids 数据传输对象
     * @return 通用返回结果
     */
    @PostMapping("/passwords")
    public HttpResponse<String> batchResetPassword(@RequestBody Collection<Long> ids) {
        service.batchResetPassword(ids);
        return new HttpResponse<>();
    }

    /**
     * 绑定角色
     *
     * @param id      用户id
     * @param roleIds 角色id集合
     * @return 通用返回结果
     */
    @PostMapping("/{id}/roles")
    public HttpResponse<String> bingRoles(@PathVariable("id") Long id, @RequestBody Collection<Long> roleIds) {
        service.bingRoles(id, roleIds);
        return new HttpResponse<>();
    }

    /**
     * 人员下拉框查询
     *
     * @param queryVo 查询参数
     * @return 用户数据
     */
    @PostMapping("/dropdown")
    public HttpResponse<List<UserDTO>> batchQuery(@RequestBody UserDropdownQueryVo queryVo) {
        return new HttpResponse<List<UserDTO>>().setData(service.dropDown(queryVo));
    }

    /**
     * 编辑密码
     *
     * @param user 数据传输对象
     * @return 通用返回结果
     */
    @PutMapping("/password")
    public HttpResponse<String> editPassword(@RequestBody UserDTO user) {
        service.editPassword(user);
        return new HttpResponse<>();
    }

    /**
     * 查询具备的权限树形
     *
     * @param userId 用户id
     * @return 树形
     */
    @GetMapping("/{id}/menuTree")
    public HttpResponse<List<TreeNodeVO>> queryMenuTree(@PathVariable("id") Long userId) {
        return new HttpResponse<List<TreeNodeVO>>().setData(service.queryMenuTree(userId));
    }

}
